#ifndef OPTIONS_PHILADELPHIA__
#define OPTIONS_PHILADELPHIA__


#include <list>

#include "base.h"
#include "options.h"

#include "ticpp/ticpp.h"

/** Nastaveni testovaci sady Philadelphia. Zna vsechny zakladni instance (P1 - P9),
 * tedy pocty vysilacu na jednotlivych antenach a vektory znovupouzitelnych vzdalenosti.
 * Dale umi nacitat i jine nastaveni Philadelphie.
 */
class PhiladelphiaOptions: public Options {
public:
	/** Defaultni konstruktor. Inicializuje zakladni tridu pro nastaveni.
	 * \param parent zakladni nastaveni programu
	 */
	PhiladelphiaOptions(Options & parent): Options(parent) {
		demands = demandVectors_[0];
		reuse = reuseDistances_[0];
		reuse_size = 6;
		reuse_delete = false;
		demands_delete = false;
		problem = 0;
	}
	/** Destruktor, v pripade potreby dealokuje vyuzitou pamet.
	 */
	~PhiladelphiaOptions() {
		if (reuse_delete) delete[] reuse;
		if (demands_delete) delete[] demands;
	}
	void LoadProblem(int d);
	void Read(ticpp::Element * settings);
	void Print();
	int * demands; ///< pocty vysilacu na jednotlivych antenach
	int problem; ///< cislo zname instance Philadelphie (1 - 9)
	double * reuse; ///< vektor znovupouzitenych vzdalenosti
	int reuse_size; ///< delka vektoru znovupouzitelnych vzdalenosti
private:
	bool reuse_delete, ///< byl alokovan vektor znovupouzitelnych vzdalenosti?
		demands_delete; ///< bylo alokovano pole poctu vysilacu?
	static int problemInstance_[9][2]; ///< prirazeni znamych vektoru znovupouzitelnych vzdalenosti a poctu vysilacu jednotlivym instancim Philadelphie
	static int demandVectors_[5][21]; ///< zakladni pocty pozadovanych vysilacu
	static double reuseDistances_[3][6]; ///< zakladni vektory znovupouzitelnych vzdalenosti
};

#endif
